#include <iostream>
#include "client.h"

#include <signal.h> //添加信号处理  防止向已断开的连接通信

/**
  信号处理顺序说明：在Linux操作系统中某些状况发生时，系统会向相关进程发送信号，
  信号处理方式是：1，系统首先调用用户在进程中注册的函数，2，然后调用系统的默认
  响应方式,此处我们可以注册自己的信号处理函数，在连接断开时执行
  */

void sig_pipe(int signo);    //用户注册的信号函数,接收的是信号值

int main(int argc,char *argv[])
{
    sighandler_t ret;
    //信号处理函数  SIGINT 是当用户按一个 Ctrl-C 建时发送的信号
    ret = signal(SIGTSTP,sig_pipe);
    if(SIG_ERR == ret)
    {
        printf("信号挂接失败\n");
        return -1;
    }
    else
        printf("信号挂接成功\n") ;
    client::inst()->registClient();
}

void sig_pipe(int signo)    //传入套接字描述符
{
    printf("Catch a signal\n");
    if(signo == SIGTSTP)
    {

        printf("接收到 SIGTSTP 信号\n");

        int ret = client::inst()->closeClient();
        if(ret == 0)
            printf("成功 : 关闭套接字\n");
        else if(ret ==-1 )
            printf("失败 : 未关闭套接字\n");
        exit(1);
    }
}
